﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using RiskMan.DataClass.Models;
using RiskMan.DataClass.Models.RM;
using RiskMan.Views.Dialogs;
using System.Text.RegularExpressions;

namespace RiskMan.Views.LimitMoneyAndDeals
{
    /// <summary>
    /// Логика взаимодействия для newLimitMoneyAndDeals.xaml
    /// </summary>
    public partial class NewLimitMoneyAndDeals : Window
    {
        public LimitMoneyAndDealsModel limit;
        private MainWindow mainWindow;
        private DataClass.Data data;
        List<Trade> trades;

        public NewLimitMoneyAndDeals(MainWindow mainWindow, LimitMoneyAndDealsModel limitMoneyAndDealListModel, DataClass.Data data, bool isEdit)
        {
            InitializeComponent();

            this.mainWindow = mainWindow;
            this.limit = limitMoneyAndDealListModel;
            this.data = data;
            trades = data.GetTradeList();

            #region ClientCode

            var result = new List<Trade>();

            for (int j = 0; j < trades.Count; j++)
            {
                bool tr = false;

                for (int i = 0; i < data.LimitMoneyAndDealsList.Count; i++)
                {
                    if (trades[j].Account == data.LimitMoneyAndDealsList[i].Account && trades[j].ClientCode == data.LimitMoneyAndDealsList[i].ClientCode)
                    {
                        tr = true;
                    }
                }

                if (tr == false)
                    result.Add(trades[j]);
            }
            trades = result;

            if (isEdit == true)
                trades.Add(new Trade() { Account = limitMoneyAndDealListModel.Account, ClientCode = limitMoneyAndDealListModel.ClientCode });

            cmbxSelectAccount.ItemsSource = trades.Select(a => a.ClientCode).ToList();
            if (cmbxSelectAccount.Items.Count > 0)
                cmbxSelectAccount.SelectedIndex = 0;

            #endregion

            string[] listItems = { "Валюта счета", "Проценты" };
            cmbxType.ItemsSource = listItems;
            cmbxType.SelectedItem = "Валюта счета";
        }

        private void btnSave_Click(object sender, RoutedEventArgs e)
        {
            if (String.IsNullOrEmpty(cmbxSelectAccount.Text.Trim()))
            {
                new DialogMessage("Выбирите счет", "Предупреждение");
                return;
            }

            if (String.IsNullOrEmpty(txbxPause.Text.Trim()))
            {
                new DialogMessage("Не определена пауза для отдыха трейдера", "Предупреждение");
                return;
            }

            if (!String.IsNullOrEmpty(txbxLossDealsInterval.Text.Trim()))
                if (String.IsNullOrEmpty(txbxLossInterval.Text.Trim()))
                {
                    new DialogMessage("Определите интервал времени за который считается убыток", "Предупреждение");
                    return;
                }

            if (!String.IsNullOrEmpty(txbxLossDealsPeriod.Text.Trim()))
                if (String.IsNullOrEmpty(txbxPeriodLossDeals.Text.Trim()))
                {
                    new DialogMessage("Определите период времени, за который считаются убыточные сделки", "Предупреждение");
                    return;
                }

            double tmpDouble;

            limit.Account = cmbxSelectAccount.Text;
            limit.LimiMoneyType = cmbxType.Text;
            if (Double.TryParse(txbxLimitMoney.Text, out tmpDouble))
                limit.LimitMoney = Convert.ToDouble(txbxLimitMoney.Text);
            else
                limit.LimitMoney = 0;


            limit.LimitDeals = String.IsNullOrEmpty(txbxLimitDeals.Text) ? 0 : Convert.ToInt32(txbxLimitDeals.Text);
            limit.SeriesLossDeals = String.IsNullOrEmpty(txbxSeriesLossDeals.Text) ? 0 : Convert.ToInt32(txbxSeriesLossDeals.Text);
            limit.LossAtInterval = String.IsNullOrEmpty(txbxLossInterval.Text) ? 0 : Convert.ToInt32(txbxLossInterval.Text);
            limit.DealsLossAtPeriod = String.IsNullOrEmpty(txbxLossDealsPeriod.Text) ? 0 : Convert.ToInt32(txbxLossDealsPeriod.Text);
            limit.PeriodLossDeals = String.IsNullOrEmpty(txbxPeriodLossDeals.Text) ? 0 : Convert.ToInt32(txbxPeriodLossDeals.Text);
            limit.TimePause = Convert.ToInt32(txbxPause.Text);

            this.Close();

        }

        private void button3_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {

        }

        private void txbxLimitMoney_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            Regex inputRegex = new Regex(@"^[1234567890.,]$");
            Match match = inputRegex.Match(e.Text);
            if (!match.Success)
                e.Handled = true;

            if ((((TextBox)sender).Text.IndexOf('.') != -1 || ((TextBox)sender).Text.IndexOf(',') != -1) && ((e.Text.IndexOf('.') != -1 && e.Text == "." ) || ( e.Text.IndexOf(',') != -1 && e.Text == ",")))
                e.Handled = true;
        }
    }
}
